package cn.always.xiajia.admin.client.api.oauth2;

import javax.validation.Valid;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import cn.always.xiajia.admin.client.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
import cn.always.xiajia.admin.client.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO;
import cn.always.xiajia.admin.client.api.oauth2.dto.OAuth2AccessTokenRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "RPC服务-OAuth2访问令牌")
@FeignClient(name = "${xj.service.admin.name}${xj.service.admin.version:}/${xj.service.admin.version}/${xj.rpc.rpcurlprefix}/admin/oauth2/oauth2accesstoken")
public interface OAuth2AccessTokenClient {

	/**
	 * 创建访问令牌
	 *
	 * @param reqDTO 访问令牌的创建信息
	 * @return 访问令牌的信息
	 */
	@Schema(description = "创建访问令牌")
	@PostMapping("/createaccesstoken")
	public OAuth2AccessTokenRespDTO createAccessToken(@RequestBody @Valid OAuth2AccessTokenCreateReqDTO reqDTO);

	/**
	 * 校验访问令牌
	 *
	 * @param accessToken 访问令牌
	 * @return 访问令牌的信息
	 */
	@Schema(description = "校验访问令牌")
	@PostMapping("/checkaccesstoken")
	public OAuth2AccessTokenCheckRespDTO checkAccessToken(@RequestParam(value = "accessToken") String accessToken);

	/**
	 * 移除访问令牌
	 *
	 * @param accessToken 访问令牌
	 * @return 访问令牌的信息
	 */
	@Schema(description = "移除访问令牌")
	@PostMapping("/removeaccesstoken")
	public OAuth2AccessTokenRespDTO removeAccessToken(@RequestParam(value = "accessToken") String accessToken);

	/**
	 * 刷新访问令牌
	 *
	 * @param refreshToken 刷新令牌
	 * @param clientId 客户端编号
	 * @return 访问令牌的信息
	 */
	@Schema(description = "刷新访问令牌")
	@PostMapping("/refreshaccesstoken")
	public OAuth2AccessTokenRespDTO refreshAccessToken(@RequestParam(value = "refreshToken") String refreshToken,
			@RequestParam(value = "clientId") String clientId);

}
